/**
 * BorrowDevice控制器模块
 * controller\ Borrow.js
 *
 */


const express = require("express");
const util = require("../common/util");
/**
 * @typedef {BorrowDB}
 */
const BorrowDB = require("../model/sqlite/deviceBorrow");

/**
 * 获取设备借用记录信息
 * @param {express.Request} req
 * @param {express.Response} res
 */
function find(req, res) {
  (async function () {
    try {
      let db = BorrowDB.getInstance();
      await db.connect();
      let result = await db.find(req.params.id);
      util.logFormat(`获取设备借用记录【${req.params.id}】信息%O`, result);
      res.json(util.FormatJSONData(200, `获取设备借用记录【${req.params.id}】`, result));
    } catch (err) {
      util.err(err);
      res.json(util.FormatJSONData(500, "服务器内部错误", { Error: err }));
    }
  })();
}

  /**
   * 获取设备借用记录列表
   * @param {express.Request} req
   * @param {express.Response} res
   * GET /borrow-records
   * 查询借用记录，支持分页和过滤
   * req.query 参数示例:
   * {
   *    limit: 10,
   *    offset: 0,
   *    status: 'approved',
   *    userId: 123,
   *    deviceId: 456
   * }
   */
 async function findAll(req, res) {
  try {
    // 从请求查询参数获取分页和过滤条件
    const limit = req.query.limit ? parseInt(req.query.limit) : -1;
    const offset = req.query.offset ? parseInt(req.query.offset) : -1;

    // 组装过滤条件，只传入存在的
    const filters = {};
    if (req.query.status){
      filters.status = req.query.status;
      console.log(filters.status);
    }
    if (req.query.userId) filters.userId = parseInt(req.query.userId);
    if (req.query.deviceId) filters.deviceId = parseInt(req.query.deviceId);

    let db = BorrowDB.getInstance();
    await db.connect();
    // 调用服务方法获取数据
    // const records = await borrowRecordService.findAll({ limit, offset, filters });
    let records = await db.findAll({ limit, offset, filters });
    if (!records || records.length === 0) {
      res.status(200).json({success:false, message:"没有找到相关记录"});
    } else {
      res.json({success:true, data:records});
    }
  } catch (err) {
    console.error('查询借用记录出错', err);
    res.status(500).json({
      success: false,
      message: '查询借用记录失败'
    });
  }
}


/**
 * 新建设备借用记录（借用）
 * @param {express.Request} req
 * @param {express.Response} res
 */
function add(req, res) {
  (async function () {
    try {
      // 只需设备id, 用户id, 借用日期，状态（默认借用中）
        let deviceId=req.body.deviceId;
        let userId=req.session.user.id;

      let db = BorrowDB.getInstance();
      await db.connect();
      let result = await db.createBorrowRecord(userId,deviceId);
      util.log(`新增设备借用记录：lastID->${result}`);
      res.json(util.FormatJSONData(201, "新增设备借用记录", { lastID: result }));
    } catch (err) {
      util.err(err);
      res.json(util.FormatJSONData(500, "服务器内部错误", { Error: err }));
    }
  })();
}

/**
 * 更新设备借用记录（例如归还）
 * @param {express.Request} req
 * @param {express.Response} res
 */
function update(req, res) {
  (async function () {
    try {
      let borrow = {
        id: req.params.id,
        deviceId: req.body.deviceId,
        userId: req.body.userId,
        // borrowDate: req.body.borrowDate,
        // returnDate: req.body.returnDate,
        // status: req.body.status,
        // updatedTime: Date.now(),
      };
      // let deviceid=req.params.id;
      let deviceId=req.body.deviceId;
      let userId=req.session.user.id;
      let db = BorrowDB.getInstance();
      await db.connect();
      let result = await db.returnBorrowRecord(userId,deviceId);
      
       // 如果result为空或0，认为没有找到可归还记录
       if (!result) {
        return res.json(util.FormatJSONData(400, "未找到可归还的借用记录"));
      }
      util.log(`更新设备借用记录：changes->${result}`);
      res.json(util.FormatJSONData(200, "更新设备借用记录", { changes: result }));
    } catch (err) {
      util.err(err);
      res.json(util.FormatJSONData(500, "服务器内部错误", { Error: err }));
    }
  })();
}

/**
 * 删除设备借用记录
 * @param {express.Request} req
 * @param {express.Response} res
 */
function remove(req, res) {
  (async function () {
    try {
      let id = req.params.id;
      let db = BorrowDB.getInstance();
      await db.connect();
      let result = await db.remove(id);
      util.log(`删除设备借用记录：changes->${result}`);
      res.json(util.FormatJSONData(204, "删除设备借用记录", { changes: result }));
    } catch (err) {
      util.err(err);
      res.json(util.FormatJSONData(500, "服务器内部错误", { Error: err }));
    }
  })();
}

module.exports = {
    find,
    findAll,
    add,
    update,
    remove,

};



